/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.ucase.payment.service;

import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseMainInfoVo;
import com.icinfo.cloud.provider.punish.ucase.payment.dto.*;
import com.icinfo.cloud.provider.punish.ucase.payment.model.CasePaymentResultRecord;
import com.icinfo.cloud.provider.punish.ucase.payment.model.PaymentResultInfo;
import com.icinfo.cloud.provider.punish.ucase.payment.vo.CasePaymentResultRecordVo;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.time.LocalDate;

/**
 * 描述: 案件缴款结果记录表 case_payment_result_record 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年03月02日
 */
public interface ICasePaymentResultRecordService extends BaseService {

    /**
     * 【V1.0.0】描述：保存案件缴款结果记录信息
     *
     * @param saveDto {@link CasePaymentResultRecordSaveDto}
     * @return {@link Result <String>} 保存结果
     * @author xiangyuyu
     * @date 2022-03-02 15:23
     */
    Result<String> saveCasePaymentResultRecordInfo(CasePaymentResultRecordSaveDto saveDto);

    /**
     * 【V1.0.0】描述：保存案件缴款结果后续业务处理
     *
     * @param dto {@link CasePaymentResultRecordSaveDto}
     * @return String 处理结果错误信息
     * @author xiangyuyu
     * @date 2022-07-06 19:22
     */
    String serviceDealAfterSaveCasePaymentResult(CasePaymentResultRecordSaveDto dto);

    /**
     * 描述：更新缴款结果处理后的信息
     *
     * @param dto {@link CasePaymentResultRecord}
     * @return int 更新成功记录数
     * @author xiangyuyu
     * @date 2022-07-06 19:41
     */
    int updatePaymentResultInfoAfterDeal(CasePaymentResultRecord dto);

    /**
     * 【V1.0.0】描述：获取案件缴款结果记录详情
     *
     * @param queryDto {@link CasePaymentResultRecordQueryDto}
     * @return {@link CasePaymentResultRecordVo} 案件缴款结果记录详情
     * @author xiangyuyu
     * @date 2022-03-02 15:23
     */
    CasePaymentResultRecordVo getCasePaymentResultRecordDetail(CasePaymentResultRecordQueryDto queryDto);


    /**
     * 【V1.1.0】描述：根据案件id查询最新缴款结果信息
     *
     * @param caseId 案件id
     * @return {@link CasePaymentResultRecordVo} 案件缴款结果记录详情
     * @author xiangyuyu
     * @date 2022-04-25 15:34
     */
    CasePaymentResultRecordVo getCasePaymentResultRecordDetailByCaseId(String caseId);

    /**
     * 【V1.3.1】描述：查询统一支付缴款结果信息
     *
     * @param queryDto {@link PaymentResultInfoDto}
     * @return {@link PaymentResultInfo} 支付结果信息
     * @author xiangyuyu
     * @date 2022-07-11 16:25
     */
    PaymentResultInfo getPaymentResultInfo(BusQueryPayStatusModelDto queryDto);

    /**
     * 【V1.3.1】描述：获取统一支付缴款结果保存并进行案件处理
     *
     * @param dto {@link PaymentResultDealDto}
     * @return {@link Result<String>} 操作结果
     * @author xiangyuyu
     * @date 2022-07-12 19:33
     */
    Result<String> savePaymentResultAndDealCaseInfo(PaymentResultDealDto dto);

    /**
     * 描述：添加电子发票附件信息
     *
     * @param caseMainInfo           {@link CaseMainInfoVo}
     * @param documentCatalogCode    文书目录编码
     * @param electricInvoiceAddress 电子发票地址
     * @param partyId                当事人id
     * @return boolean 是否成功
     * @author xiangyuyu
     * @date 2022/9/8
     * @since 添加电子发票附件信息
     */
    boolean addAttachmentElectricInvoice(CaseMainInfoVo caseMainInfo, String documentCatalogCode, String electricInvoiceAddress, String partyId);

    /**
     * 批量处理：缴款后，没有自动生成执行情况核查记录文书的问题
     * @param caseId
     * @return
     */
    boolean batchRebuildExecuteCheckDoc(String caseId);
    /**
     * 描述：更新缴款结果处理简易程序状态
     *
     * @param caseMainInfoVo 案例主要信息签证官
     * @param payMoney       支付的钱
     * @param executeDate    执行日期
     * @return int
     * @author shishengyao
     * @date 2022/12/02
     */
    int updateSimpleCaseStatusAfterPayment(CaseMainInfoVo caseMainInfoVo, String payMoney, LocalDate executeDate);

    /**
     * 描述：根据缴款结果处理历史简易程序的状态
     *
     * @param caseMainInfoVo 案件详情表vo
     * @param resultRecordVo 缴款结果vo
     * @return int
     * @author shishengyao
     * @date 2023/01/05
     */
    int updateSimpleCaseStatusByHistoryPaymentRecord(CaseMainInfoVo caseMainInfoVo, CasePaymentResultRecordVo resultRecordVo);

    CasePaymentResultRecord getCasePaymentResultByCaseId(String caseId);
}
